iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

System Software Introduction系列 第 26

Build Environment Setup in Build System​

  • 分享至 

  • xImage
  •  

System software build configuration可以設定build flow需要使用的build environment,所以build system在system software build flow開始之前會負責準備build environment,我們今天會講解build system執行此步驟的方法。

What is the Build Environment Set Up Flow of Build System

我們在system software build and test的章節介紹過如何建立單一種一致的build environment,不過build system需要隨著build configuration的設定準備不同的build environment,包括了compiler版本、tool版本、環境變數等,所以build system需要方法動態建立、改變build environment。

Build environment set up flow可以讓build flow的設計獨立於build environment,不需要在build flow當中再另外指定tool的路徑。
例如: build configuration指定使用的C compiler是GCC 8.5,由build system完成build environment set up flow之後,build flow內直接使用gcc指令就可以使用GCC 8.5指令,而不需要再指定GCC 8.5的executable路徑

https://ithelp.ithome.com.tw/upload/images/20221007/20152298Nnznx1HGIE.jpg

Build Dependent Tools/Software at Build Time

Flow

  1. User在build configuration設定dependent tools/software、source code/download path以及build method
  2. Build system根據source code/download path以及build method build dependent tools/software
  3. Build system根據build configuration的環境設定指令將build environment建立完成

例如:

  1. User在build configuration設定C compiler是GCC 8.5、source code download path
  2. Build system根據download path得到GCC 8.5的source code,並依照build method build GCC 8.5 build
  3. Build system利用update-alternative將GCC 8.5更改為預設的gcc指令更改環境變數CC指向GCC 8.5當中的gcc將build environment建立完成

Pros

  • Build flow需要的tool只有需要時才會download與安裝,平常不占用儲存空間

Cons

  • Build system software時可能需要多花時間build dependent tools/software
  • 全面替換dependent tools/software時,需要把新的dependent tools對應的環境設定指令更新到每一份build configuration內,維護不便

Load Environment Modules

What is Environment Modules

Environment Modules是一套簡化shell初始化的工具,藉由module file的敘述,可以為tools/software修改shell的環境。

  • 每一組tools/software和需要的shell設定被稱為一個module,被寫在一支module file當中
  • 當需要一組tools/software和shell設定的時候,可以module load使用一個module來設定環境,而不再需要使用的時候可以 module umload解除一個module file設定以避免和其他module發生衝突
  • Module file當中敘述使用一組tools/software以及shell設定時的dependency與需要更動的系統設定
    • 需要先module load哪一些module file: module本身需要使用其他module的設定才能使用,所以先將其他module load進來
    • 和哪一些module file有衝突: module之間有些設定會互相衝突
    • 環境變數設定
  • 使用Environment Modules與module file可以讓每一組tools/software的環境設定有統一的設定

Flow

  1. 在build system運作的software platform上安裝Environment Modules工具,並設定一個module path放module files
  2. 在build system運作的software platform上事先安裝好多個版本的tools/software。例如: 事先安裝好GCC 8.5, GCC 9.4, GCC 10.3
  3. 為每一個版本tools/software在module path寫一份module file。例如: 幫GCC 8.5寫一份module file在module path/gcc/8.5,幫GCC寫一份GCC 9.4的module file在module path/gcc/9.4…
  4. 當build system需要使用其中一個版本的tools/software時,只需要使用module load特定該版本對應的tools/software。例如: 要使用GCC 8.5時,則呼叫module load gcc/8.5
  5. Module load完成後,使用gcc指令就會呼叫GCC 8.5

Pros

  • 只需要使用module load/unload指令等就可完成好tools/software的環境設定,可以簡化build configuration的設定項目
  • Tools/software改版、更改環境設定,對於使用到這些tools/software的build configuration無須更改即可使用

Cons

  • Build system需要更大的儲存容量存放build好的tools/software,module load指令才可以發揮效果
  • Build system內提供的tools/software種類與版本數量有限,可能會發生build configuration需要但build system無法提供的狀況

上一篇
Features of the System Software Build System
下一篇
System Software MISC – Benchmark​
系列文
System Software Introduction30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言